package com.szxy.frontend.portal.service.impl;

import com.szxy.frontend.portal.feign.CommonItemsFeignClient;
import com.szxy.frontend.portal.feign.CommonRedisFeiginClient;
import com.szxy.frontend.portal.service.ItemService;
import com.szxy.pojo.TbItem;
import com.szxy.pojo.TbItemDesc;
import com.szxy.pojo.TbItemParamItem;
import com.szxy.utils.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @Auther:zwer
 * @Date:2019/9/11 21:10
 * @Description:com.szxy.frontend.portal.service.impl
 * @Version:1.0
 **/
@Service
public class ItemServiceImpl implements ItemService {

    @Autowired
    private CommonItemsFeignClient commonItemsFeignClient;
    @Autowired
    private CommonRedisFeiginClient commonRedisFeiginClient;

    @Override
    public Result selectItemInfo(Long itemId) {
        // 查询 Redis 缓存
        try {
            TbItem itemInfo = this.commonRedisFeiginClient.getItemInfo(itemId);
            if (itemInfo != null) {
                // System.out.println("查询 Redis 数据库 itemInfo.....");
                return Result.ok(itemInfo);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        //查询数据库
        TbItem item = this.commonItemsFeignClient.findItemById(itemId);
        try {
            //將商品基本信息放入 Redis 缓存中
            this.commonRedisFeiginClient.insertItemInfo(item);
        } catch (Exception e) {
            e.printStackTrace();
        }
        if (item != null) {
            return Result.ok(item);
        }
        return Result.error("查询失败");
    }


    @Override
    public Result selectItemDescByItemId(Long itemId) {
        // 查询 Redis 缓存
        try {
            TbItemDesc itemDescRedis = this.commonRedisFeiginClient.getItemDesc(itemId);
            if(itemDescRedis != null){
                // System.out.println("查询 Redis 数据库 itemDescRedis.....");
                Result.ok(itemDescRedis);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        // 查询关系型数据库
        TbItemDesc itemDesc = this.commonItemsFeignClient.findItemDescByItemId(itemId);
        try {
            //将商品描述信息添加 Redis 缓存中
            this.commonRedisFeiginClient.insertItemDesc(itemDesc);
        } catch (Exception e) {
            e.printStackTrace();
        }
        if(itemDesc != null){
            return Result.ok(itemDesc);
        }
        return Result.error("查询失败");
    }

    @Override
    public Result selectTbItemParamItemByItemId(Long itemId) {
        // 先查询 Redis 缓存
        TbItemParamItem itemParamItemRedis = this.commonRedisFeiginClient.getItemParamItem(itemId);
        if(itemParamItemRedis != null){
            // System.out.println("查询 Redis 数据库 itemParamItemRedis.....");
            return Result.ok(itemParamItemRedis);
        }
        // 查询关系型数据库
        TbItemParamItem itemParamItem = this.commonItemsFeignClient.findItemParamItemByItemId(itemId);
        try {
            //添加到 Redis 缓存中
            this.commonRedisFeiginClient.insertItemParamItem(itemParamItem);
        } catch (Exception e) {
            e.printStackTrace();
        }
        if (itemParamItem != null) {
            return Result.ok(itemParamItem);
        }
        return Result.error("查询错误");
    }
}
